#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Filename: dir_get.py
# Author: ChenChangSong
# Date: 2025-08-24

"""
功能描述:获取测试用例目录（根据父目录ID查询）
https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_tcase_categories.html
"""

from comm.common_code import *
def dir_get_id_and_name(parent_id=0, dir_name=None, max_retries=5):
    """查询指定目录ID（精确匹配）,返回目录ID和目录名称
    :param parent_id: 父目录ID,=0时范围是“所有的，=xxxx则查询xxxx目录下的”
    :param dir_name: 目录名称
    :param max_retries: 最大重试次数（针对429限流）
    """
    excel_data = get_excel_data()
    url = "https://api.tapd.cn/tcase_categories"
    payload = {
        "access_token": excel_data['access_token'],
        'workspace_id': excel_data['项目ID'],  # 项目ID(必填)
        'parent_id': parent_id,  # 父目录ID
        'name': dir_name,       # 目录名称(支持模糊匹配)
        'limit': 200            # 设置返回数量限制，默认为30,最大200
        # 'id':None,  #id
        # 'description':None,  #目录描述
        # 'modified':None,  #最后修改时间
        # 'created':None,  #创建时间
        # 'creator':None,  #目录创建人
        # 'modifier':None,  #目录最后修改人
        # 'sorting':None,  #目录排序序号
        # 'page':None,  #返回当前数量限制下第N页的数据，默认为1（第一页）
        # 'order':None,  #排序规则，规则：字段名 ASC或者DESC，然后 urlencode（如按创建时间逆序：order=created%20desc）
        # 'fields':None  #设置获取的字段，多个字段间以','逗号隔开
    }
    
    retries = 0
    while retries <= max_retries:
        logger.info(f'查询测试用例目录{dir_name}父目录ID:{parent_id}↓↓↓=================================================↓↓↓')
        response_code, response = api_request(method='GET', url=url, headers={}, params=payload)
        
        if response_code == 429:  # 限流错误
            retries += 1
            if retries > max_retries:
                logger.error("达到最大重试次数，仍然被限流")
                return response_code, response
                
            # 计算等待时间（指数退避）
            wait_time = 2 ** retries
            logger.warning(f"遇到限流，等待{wait_time}秒后重试 ({retries}/{max_retries})")
            time.sleep(wait_time)
            continue
            
        logger.info(f"响应内容: {response}")
        logger.info(f'↑↑↑=================================================↑↑↑')
        return response_code, response

if __name__ == "__main__":
    # dir_get_id_and_name(parent_id='', dir_name='')
    dir_get_id_and_name()
